﻿using ConfExpert.Forms.Base;
using ConfExpert.Forms.Depo;

using DevExpress.Data;
using DevExpress.Utils;
using DevExpress.XtraBars;
using DevExpress.XtraEditors.Controls;
using DevExpress.XtraEditors.Repository;
using DevExpress.XtraGrid.Views.Base;
using DevExpress.XtraGrid.Views.Grid;
using DevTeam;


using System;
using System.Collections.Generic;
using System.Data;
using System.Drawing;
using System.Windows.Forms;

namespace ConfExpert.Forms.SatinAlma.YeniYapi
{
    public partial class AyrimTalep : XForm
    {
        int POId = 0;
        int BolunecekAyrimId = 0;
        DataSet dataset;
        BindingSource bsAyrim;
        BindingSource bsQty;
        bool MyOrder = false;
        RepositoryItemButtonEdit emptyEditor;

        public AyrimTalep(int POId)
        {
            InitializeComponent();
            this.POId = POId;
        }

        private void AyrimTalep_Load(object sender, EventArgs e)
        {
            splitter.AutoSize();

            DataRow drPO = ExecuteDataTable("GetPO", POId, WhoAmI).Rows[0];
            BolunecekAyrimId = drPO["BolunecekAyrimId"].ToInt();
            MyOrder = drPO["MyOrder"].ToBool();

            //gvQty de ETA'yı da göster. Gelen kumaşı listeden çıkar!

            Bind();


            if (isKD)
            {
                DataTable dtAktif = ExecuteDataTable("GetAktifSiparisler");
                List<int> aktifPOIds = new List<int>();
                foreach (DataRow r in dtAktif.Rows)
                    aktifPOIds.Add(r["POId"].ToInt());

                RepositoryItemComboBox riPOId = (RepositoryItemComboBox)cmbPOId.Edit;
                riPOId.Items.AddRange(aktifPOIds);
                riPOId.TextEditStyle = TextEditStyles.DisableTextEditor;
                cmbPOId.EditValue = POId;

                GridManager gm = GridManager.GetManager(gvAyrim);
                gm.GridMenu.AddMenu("Bu ayrımı BÖL", Bol);
                gm.GridMenu.AddMenu("YENİ ayrım oluştur", YeniAyrimOlustur);
            }
            else
            {
                //bs1.Filter = "MyCust>0 OR Durum = 'Yeni'";
                cmbPOId.Visibility = BarItemVisibility.Never;
            }

            gvAyrim_FocusedRowChanged(null, null);
            emptyEditor = new RepositoryItemButtonEdit();
            emptyEditor.Buttons.Clear();
            emptyEditor.TextEditStyle = TextEditStyles.HideTextEditor;
            gcAyrim.RepositoryItems.Add(emptyEditor);
            gvAyrim.CustomRowCellEdit += gvAyrim_CustomRowCellEdit;
            gvAyrim.BestFitColumns();

            cmbPOId.EditValueChanged += cmbPOId_EditValueChanged;
            btnSwap.ItemClick += btnSwap_ItemClick;
            btnKaydet.ItemClick += btnKaydet_ItemClick;
            chkShowOnly.CheckedChanged += chkShowOnly_CheckedChanged;
        }

        private void Bind()
        {
            this.Text = "Ayrım Talep - " + POId.ToStr();
            dataset = ExecuteDataSet("GetPOAyrim", POId, BolunecekAyrimId, WhoAmI);
            bsAyrim = gvAyrim.Init(dataset.Tables[1]);
            bsQty = gvQty.Init(dataset.Tables[0]);

            //gleBolunecekAyrim.Edit.Assign(GetCustomGLE(gridView1.DataTable(), "AyrimId", "AyrimId"));
            //((RepositoryItemGridLookUpEdit)gleBolunecekAyrim.Edit).View.Columns["AyrimId"].ColumnEdit = RI(Rp.Ayrim);

            gvAyrim.MakeReadOnly();
            gvAyrim.FormatAsNumber(1, "TotalQty");
            gvAyrim.AddSummary("TotalQty");

            if (!isKD)
                gvAyrim.MakeColumnInvisible("OnayBekliyor");

            gvQty.SetCaptions("OrderedQty:Sip. mt.", "NewQty:Yeni mt.");
            gvQty.FormatAsNumber(1, "OrderedQty", "BolunecekQty", "NewQty");
            gvQty.AddSummary("OrderedQty", "BolunecekQty", "NewQty");
            gvAyrim.Columns["AyrimId"].SortOrder = ColumnSortOrder.Ascending;
            gvAyrim.RowCellStyle += gvAyrim_RowCellStyle;
            gvQty.RowCellStyle += gvQty_RowCellStyle;
            gvQty.MakeColumnInvisible("ProductId", "POLinesId");
            gvAyrim.MakeColumnInvisible("MyCust");

            gvAyrim.OptionsView.EnableAppearanceOddRow = gvAyrim.OptionsView.EnableAppearanceEvenRow = false;
            gvAyrim.RowStyle += gvAyrim_RowStyle;
            gvAyrim.FocusedRowChanged += gvAyrim_FocusedRowChanged;
            gvAyrim.MoveFirst();

            gvAyrim.BestFitColumns();
            gvQty.BestFitColumns();
        }

        private void btnKaydet_ItemClick(object sender, ItemClickEventArgs e)
        {
            gvQty.EndEditing();

            if (!MyOrder)
                if (BolunecekAyrimId > 0)
                {
                    decimal fazla = gvQty.DataTable().Compute("SUM(NewQty)", "NewQty>BolunecekQty").ToDecimal();

                    if (fazla > 0)
                    {
                        ShowErrorMessage("Girdiğiniz yeni metrajların tümü, 'Bölünecek mt.' sütunundakilerden küçük olmalı!");
                        return;
                    }
                }

            using (YeniAyrim ya = new YeniAyrim())
            {
                if (ya.ShowDialog() == DialogResult.OK)
                    if (BolunecekAyrimId == ya.AyrimId)
                        ShowErrorMessage("Bölünecek ve oluşturulacak ayrımlar aynı olamaz!");
                    else
                    {
                        string xml = gvQty.DataTable().Serialize();
                        DataTable dtA = ExecuteDataTable("UpdPOAyrim3", isKD || MyOrder, xml, BolunecekAyrimId, ya.AyrimId, ya.GomlekTermini, ya.TerminNotu, WhoAmI);
                        RefreshLookups();
                        gvAyrim.RefreshData();

                        //MyData.AyrimRow r = AppSession.Lookups.Ayrim.FindByAyrimId(ya.AyrimId);
                        //if (r != null)
                        //    r.Reference = dtA.Rows[0]["Reference"].ToStr();
                        Bind();
                    }
            }
        }

        #region Onay
        private void Reddet(object sender, EventArgs e)
        {
            SetOnay(0);
        }

        private void SetOnay(int Durum)
        {
            gvQty.EndEditing();
            int AyrimId = gvAyrim.GetFocusedDataRow()["AyrimId"].ToInt();
            string poLinesIds = gvQty.GetSelectedValues("POLinesId");
            string xml = gvQty.Serialize();
            ExecuteNonQuery("UpdAyrimTalep", AyrimId, poLinesIds, xml, Durum, WhoAmI);
            Bind();
        }

        private void Onayla(object sender, EventArgs e)
        {
            SetOnay(1);
        }
        #endregion

        private void gvAyrim_CustomRowCellEdit(object sender, CustomRowCellEditEventArgs e)
        {
            if (e.Column.FieldName == "OnayBekliyor" &&
                !gvAyrim.GetRowCellValue(e.RowHandle, "OnayBekliyor").ToBool())
                e.RepositoryItem = emptyEditor;
        }

        private void btnSwap_ItemClick(object sender, ItemClickEventArgs e)
        {
            using (AyrimTalep2 ayrimTalep2 = new AyrimTalep2(POId))
                ayrimTalep2.ShowDialog();
        }

        private void cmbPOId_EditValueChanged(object sender, EventArgs e)
        {
            POId = cmbPOId.EditValue.ToInt();
            Bind();
        }

        private void YeniAyrimOlustur(object sender, EventArgs e)
        {
            BolunecekAyrimId = 0;
            Bind();
        }

        private void Bol(object sender, EventArgs e)
        {
            BolunecekAyrimId = gvAyrim.GetFocusedDataRow()["AyrimId"].ToInt();
            Bind();
        }

        private void gvAyrim_RowStyle(object sender, RowStyleEventArgs e)
        {
            GridView view = sender as GridView;
            if (e.RowHandle > -1)
            {
                if (gvAyrim.GetRowCellValue(e.RowHandle, "AyrimId").ToInt() == BolunecekAyrimId)
                    e.Appearance.BackColor = e.Appearance.BackColor2 = Color.SkyBlue;
                else
                    if (gvAyrim.GetRowCellDisplayText(e.RowHandle, "Durum") == "Yeni")
                        e.Appearance.BackColor = e.Appearance.BackColor2 = Color.Ivory;
                    else
                        e.Appearance.Combine((e.RowHandle & 1) != 0 ? view.Appearance.EvenRow : view.Appearance.OddRow);
            }
        }

        private void chkShowOnly_CheckedChanged(object sender, ItemClickEventArgs e)
        {
            bsQty.Filter = chkShowOnly.Checked ? "NewQty>0" : string.Empty;
        }

        private void gvAyrim_RowCellStyle(object sender, RowCellStyleEventArgs e)
        {
            if (e.RowHandle > -1)
                if (e.Column.FieldName == "AyrimId")
                    if (gvAyrim.GetRowCellValue(e.RowHandle, "MyCust").ToInt() > 0)
                        e.Appearance.Font = new Font(AppearanceObject.DefaultFont, FontStyle.Bold);
        }

        private void gvQty_RowCellStyle(object sender, RowCellStyleEventArgs e)
        {
            if (e.RowHandle > -1)
                if (e.Column.FieldName == "NewQty")
                    e.Appearance.Font = new Font(AppearanceObject.DefaultFont, FontStyle.Bold);
        }

        private void gvAyrim_FocusedRowChanged(object sender, FocusedRowChangedEventArgs e)
        {
            DataRow drAyrim = gvAyrim.GetFocusedDataRow();
            if (drAyrim != null)
            {
                if (isKD)
                {
                    GridManager gm = GridManager.GetManager(gvQty);
                    gm.GridMenu.RemoveMenu("Onayla");
                    gm.GridMenu.RemoveMenu("Reddet");
                    if (gvAyrim.GetFocusedDataRow()["OnayBekliyor"].ToBool())
                    {
                        gm.GridMenu.AddMenu("Onayla", Onayla);
                        gm.GridMenu.AddMenu("Reddet", Reddet);
                    }
                }

                if (drAyrim["Durum"].ToStr() == "Yeni")
                {
                    gvQty.SetCaptions("NewQty:Yeni mt.");
                    gvQty.YanYanaGetir("BolunecekQty:NewQty");
                    gvQty.MakeReadOnly("NewQty");
                    btnKaydet.Enabled = true;
                }
                else
                {
                    gvQty.SetCaptions("NewQty:Ayrılan mt.");
                    gvQty.MakeColumnInvisible("BolunecekQty");
                    gvQty.MakeReadOnly();
                    btnKaydet.Enabled = false;
                }

                if (BolunecekAyrimId == 0)
                    gvQty.MakeColumnInvisible("BolunecekQty");

                int AyrimId = drAyrim["AyrimId"].ToInt();
                //DateTime dG = f["GomlekTermini"].ToDate();
                DataRow[] rx;

                foreach (DataRow r in gvQty.DataTable().Rows)
                {
                    rx = dataset.Tables[2].Select("POLinesId=" + r["POLinesId"].ToStr() + " AND AyrimId=" + AyrimId.ToStr());   // + " AND POLinesId=" + r["POLinesId"].ToStr() + " AND(GomlekTermini" + (dG.Equals(new DateTime(2000, 1, 1)) ? " is null)" : "='" + dG.ToString("yyyy-MM-dd") + "')"));   //dğer terminleri ve null olma durumlarını da kat!                        if (rx.Length > 0)

                    if (rx.Length > 0)
                        r["NewQty"] = rx[0]["Qty"];
                    else
                        r["NewQty"] = DBNull.Value;
                }
            }
            gvQty.RefreshData();
            gvQty.BestFitColumns();
        }
    }
}